package cn.juque.datapipeline.service;

import cn.juque.common.base.PageInfo;
import cn.juque.datapipeline.bo.group.TaskGroupInfoAddBO;
import cn.juque.datapipeline.bo.group.TaskGroupInfoUpdateBO;
import cn.juque.datapipeline.domain.TaskGroupRelationDO;
import cn.juque.datapipeline.entity.TaskGroupInfo;

import java.util.List;

/**
 * @author JUQUE
 * @version 1.0.0
 * <ul>
 *  <li>simple-generator</li>
 *  <li>任务组信息</li>
 * </ul>
 * {@code @date} 2023-04-02 14:23:40
 **/
public interface ITaskGroupInfoService {

    /**
     * 查询
     *
     * @param taskGroupInfo taskGroupInfo
     * @return List<TaskGroupInfo>
     */
    List<TaskGroupInfo> listGroupInfoWithoutPage(TaskGroupInfo taskGroupInfo);

    /**
     * 分页查询
     *
     * @param pageInfo      pageInfo
     * @param taskGroupInfo taskGroupInfo
     * @return DataGrid<TaskGroupInfo>
     */
    List<TaskGroupInfo> listGroupInfoWithPage(PageInfo pageInfo, TaskGroupInfo taskGroupInfo);

    /**
     * 加载关联任务
     * @param groupId 组ID
     * @return list
     */
    List<TaskGroupRelationDO> listTaskRelation(String groupId);

    /**
     * 详情
     *
     * @param id 主键
     * @return TaskGroupInfo
     */
    TaskGroupInfo detail(String id);

    /**
     * 保存
     *
     * @param addBO TaskGroupInfoAddBO
     */
    void saveGroupInfo(TaskGroupInfoAddBO addBO);

    /**
     * 更新
     *
     * @param updateBO TaskGroupInfoUpdateBO
     */
    void updateGroupInfo(TaskGroupInfoUpdateBO updateBO);

    /**
     * 启用或禁用
     * @param groupId 组ID
     */
    void triggerEnable(String groupId);

    /**
     * 启动一次任务组
     * @param groupId 组ID
     */
    void startOnce(String groupId);

    /**
     * 删除
     *
     * @param ids 主键列表
     */
    void deleteGroupInfo(List<String> ids);
}
